<?php  
if ( !defined('IN_SCRIPT') || !$current_user 
                           || $REQUEST_METHOD != 'POST' || get_param('ajax') != 'yes'
                           || (($mode == 'view' or $mode == 'give') && empty($current_gift) && get_param('prid') != 'new') 
                           || ($mode == 'add' && !empty($current_gift['gived_total']))
                           || (($mode == 'approve' || $mode == 'deny' || $mode == 'confirm' || $mode == 'delete') && (empty($current_gift) || !preg_match("/^[0-9]{1,10}$/", $user) ) )
                           ) { die; } 

// DONE: $pr['idpresents'] в форме заменить на prid

$page_title = ''; 

// определяем - можно ли текущему пользователю дарить этот подарок
$can_give = '';   
if($mode == 'view' || $mode == 'give') {      //DONE: нельзя предлогать больше, чем необходимо
    if($current_gift['amount_presented'] >= $current_gift['amount']) {
        $can_give = $lang['gift_allready_gived']; // "Этот подарок уже вручен.";
        if($current_gift['amount_presented'] > 1 && $current_gift['mygift_approved'] == 'P' && $current_gift['amount_presented'] > $current_gift['mygift_amount'])
            $can_give .= '<br>'.sprintf($lang['gift_x_from_y'], $current_gift['amount_presented'], $current_gift['mygift_amount']); //"Из %s вы подарили %s"
    } 
    elseif ($current_gift['mygift_approved'] == 'P')
        $can_give = $lang['gift_me_allready_gived']; // Вы уже вручили этот подарок
    elseif ($current_gift['mygift_approved'] == 'N')
        $can_give = $lang['gift_me_proposed']; // Вы предложили подарить этот подарок, но еще не получили одобрение
    elseif ($current_gift['mygift_approved'] == 'A')
        $can_give = $lang['gift_me_approved']; // Вы получили одобрение на дарение этого подарка
    elseif ($current_gift['amount_left'] <=0)
        $can_give = $lang['cant_give_no_more'];
    elseif (!LOGGED_IN)    // не залогинен
        $can_give = sprintf($lang['cant_give_not_loggedin'], "$current_location/auth");
    elseif($current_gift['user'] == $_SESSION['id'])                // нельзя дарить самому себе
        $can_give = $lang['cant_give_myself'];    
}
    
switch ($mode) { 
    case 'view':
        $default_template = 'present_detailed.tpl';
        if(get_param('prid') == 'new')
            $smarty->assign('new_present', true);
        $smarty->assign('can_give', $can_give);
        $presenters_list = array();
        if(!empty($current_gift['gived_total'])) {
            $total_users = 0;
            $new_users = 0;
            $result = db_query("SELECT u.`idusers`, u.`first_name` , u.`last_name` , u.`login` , p.`approved` , p.`amount`, p.`proposal_date`, p.`approval_date`, p.`presented_date`
                                FROM `presented` p, `users` u
                                WHERE `idpresent` =$current_gift[idpresents]
                                AND p.`user_presenter` = u.`idusers`");
            while ($row = mysql_fetch_array($result)) {
                $row['proposal_date'] = format_date_out($row['proposal_date']);
                $row['approval_date'] = format_date_out($row['approval_date']);
                $row['presented_date'] = format_date_out($row['presented_date']);
                $presenters_list[$row['approved']][] = $row;
                $total_users++;
                $new_users += $row['approved'] == 'N' ? 1 : 0;
            }
            $smarty->assign('presenters_list', $presenters_list);
            $smarty->assign('total_users', $total_users);
            $smarty->assign('new_users', $new_users);
        }
        break;
    case 'give':
        $prcount = (int)get_param('prcount');   
        if(empty($can_give) && LOGGED_IN && !empty($current_user) && !empty($current_gift) && $prcount > 0 && $prcount <= $current_gift['amount_left'] && $current_user == $current_gift['user'] && $current_user != $_SESSION['id']) {
            // проверка - дарил ли пользователь уже этот подарок
            $result = db_query("SELECT * FROM presented WHERE user_presenter =$_SESSION[id] AND idpresent =$current_gift[idpresents]");
            $row=mysql_fetch_array($result);
            if(empty($row) && db_insert("INSERT INTO `presented` (`amount`, `user_presenter`, `idpresent`, `proposal_date`) VALUES ($prcount, $_SESSION[id], $current_gift[idpresents], UTC_TIMESTAMP())", false))
                die("OK");
        }
        die("NOT OK");  
        break;
    case 'add':  
        if(CAN_EDIT) {  
            $pr['name'] = empty($pr['name']) || ($pr['name'] == $lang['pr_name_hint']) ? '' : preg_replace("/[^-\p{L}\p{N} ,\.()!?:_]/u", "", $pr['name']);
            $pr['description'] = empty($pr['description']) || ($pr['description'] == $lang['pr_desc_hint']) ? '' : strip_tags($_POST['pr']['description'], '<p><strong><em><span><ul><ol><li><a><br><hr>');
            $pr['description'] = safe_to_query($pr['description']);
            $pr['amount'] = empty($pr['amount']) || ($pr['amount'] == $lang['pr_count_hint']) ? '' : $pr['amount'];    
            $pr['link'] = empty($pr['link']) || ($pr['link'] == $lang['pr_link_hint']) ? '' : filter_var($pr['link'], FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED);
            $oc['name'] = empty($oc['name']) || ($oc['name'] == $lang['pr_occasion_hint']) ? '' : preg_replace("/[^-\p{L}\p{N} ,\.()!?:_]/u", "", $oc['name']);
            $oc['date'] = empty($oc['date']) || ($oc['date'] == $lang['pr_occasion_date_hint']) ? '' : $oc['date'];
            $pr['uploaded_img'] = empty($pr['uploaded_img']) ? '' : $pr['uploaded_img'];
            $pr['uploaded_thumb'] = empty($pr['uploaded_thumb']) ? '' : $pr['uploaded_thumb'];
            
            field_validator($lang['present_name'], $pr['name'], "name_unicode", 4, 100);
            field_validator($lang['present_desc'], $pr['description'], "string", '', 500, 0);
            field_validator($lang['present_amount'], $pr['amount'], "number", '', 11, 0);
            if((int)$pr['amount'] < 1 || !MULTIPLE_AMOUNT) $pr['amount'] = 1;   
            field_validator($lang['occasion'], $oc['name'], "name_unicode", '', 50, 0);
            field_validator($lang['occasion_date'], /*$oc['date']*/ date("d.m.Y", strtotime($oc['date'])), "date", '', 10, 0);
            
            if($pr['link'] === false) {
                add_message($lang['wrong_url']);
                $pr['link'] = '';
            }  
            $pr['link_hash'] = $pr['link'] != '' ? uniqid(rand(), true) : '';
            $pr['user'] = $_SESSION['id'];
            if($messages) {
                $default_template = 'error.tpl';
                $smarty->assign('messages', $messages);
            } else { 
                // добавление события, если есть
                $idevent = '';
                if(!empty($oc['name'])) {
                    // проверять дату в зависимости от локали
                    //if (preg_match("/^([0-9]{1,2})[.,]([0-9]{1,2})[.,]([0-9]{4})$/", $oc['date'], $mch))
                    if(strtotime($oc['date']))
                        $oc['date'] = date("Y-m-d", strtotime($oc['date'])); // "$mch[3]-$mch[2]-$mch[1]";
                    else
                        unset($oc['date']);
                        
                    if(isset($pr['idevent']) && preg_match("/^[0-9]{1,10}$/", $pr['idevent'])) {
                        db_update_by_array('events', $oc, "`user`=$_SESSION[id] AND `idevents`=0".$pr['idevent']);
                        $idevent = $pr['idevent']; 
                    } else {
                        $oc['user'] = $_SESSION['id'];
                        $idevent = db_insert($oc, true, 'events');
                    }
                }
                if(!empty($idevent))
                    $pr['idevent'] = $idevent;
                else
                    unset($pr['idevent']);

                    
                //DONE: добавление изображения, если есть  
                $image_name = basename($pr['uploaded_img']);
                if(!empty($image_name) && file_exists($pr['uploaded_img']) && rename($pr['uploaded_img'], GIFT_IMAGES_DIR.'/'.$image_name)) {
                    if(isset($current_gift['image']) && file_exists(GIFT_IMAGES_DIR.'/'.$current_gift['image'])) {
                        # удалить старый файл
                        unlink(GIFT_IMAGES_DIR.'/'.$current_gift['image']);
                    }
                    # записать в БД новый файл
                    $pr['image'] = $image_name;
                };
                unset($pr['uploaded_img']);
                
                //DONE 5: добавление иконки, если она есть и если есть основное изображение  
                $image_name = basename($pr['uploaded_thumb']);
                if(!empty($pr['image']) &&
                   !empty($image_name) && file_exists($pr['uploaded_thumb']) && rename($pr['uploaded_thumb'], GIFT_IMAGES_DIR.'/'.$image_name)) {
                    if(isset($current_gift['thumb']) && file_exists(GIFT_IMAGES_DIR.'/'.$current_gift['thumb'])) {
                        # удалить старый файл
                        unlink(GIFT_IMAGES_DIR.'/'.$current_gift['thumb']);
                    }
                    # записать в БД новый файл
                    $pr['thumb'] = $image_name;
                };
                unset($pr['uploaded_thumb']);
                    
                // добавление подарка
                $last_present = '';
                if(isset($current_gift['idpresents'])) {                    
                    db_update_by_array('presents', $pr, "`user`=$_SESSION[id] and `idpresents`=0".$current_gift['idpresents']); 
                    $last_present = $current_gift['idpresents'];
                     
                } else {   
                    $pr['date_add'] = gmdate('Y-m-d H:i:s');                           
                    $last_present = db_insert($pr, true, 'presents');    
                }
                die("$last_present");
            }
        }
        break;
    case 'approve':
        if(CAN_EDIT && $current_gift['amount_left'] > 0) {   //DONE: проверять - можно ли еще апрувить
            $result = db_query("SELECT `amount` FROM `presented` WHERE `approved` = 'N' AND `idpresent` =0$current_gift[idpresents] AND `user_presenter` =0$user");
            $row=mysql_fetch_array($result);
            if(mysql_num_rows($result) != 1 || (int)$row['amount'] <= 0) die("NOT OK");
            $amount = $row['amount'] > $current_gift['amount_left'] ? $current_gift['amount_left'] : $row['amount'];
            $rows = db_query("UPDATE `presented` SET `approved` = 'A', `approval_date` = UTC_TIMESTAMP(), `amount` = $amount WHERE `approved` = 'N' AND `idpresent` =0$current_gift[idpresents] AND `user_presenter` =0$user", true);
            if($rows == 1) die("OK");
        }
        die("NOT OK");
        break;
    case 'deny':
        if(CAN_EDIT) {     //DONE: изменять вид на форме при соответствующих действиях
          #  $rows = db_query("UPDATE `presented` SET `approved` = 'D', `deleted_date` = UTC_TIMESTAMP() WHERE `approved` = 'N' AND `idpresent` =0$current_gift[idpresents] AND `user_presenter` =0$user", true);
            $rows = db_query("DELETE FROM `presented` WHERE `approved` = 'N' AND `idpresent` =0$current_gift[idpresents] AND `user_presenter` =0$user", true);
            if($rows == 1) die("OK");
        }
        die("NOT OK");
        break;        
    case 'confirm':
        if(CAN_EDIT) {
            $rows = db_query("UPDATE `presented` SET `approved` = 'P', `presented_date` = UTC_TIMESTAMP() WHERE `approved` = 'A' AND `idpresent` =0$current_gift[idpresents] AND `user_presenter` =0$user", true);
            if($rows == 1) die("OK");
        }
        die("NOT OK");
        break;
    case 'delete':
        if(CAN_EDIT) {
            $rows = db_query("DELETE FROM `presented` WHERE `approved` = 'A' AND `idpresent` =0$current_gift[idpresents] AND `user_presenter` =0$user", true);
            if($rows == 1) die("OK");
        }
        die("NOT OK");
        break;
    case 'abandon':
        if(LOGGED_IN) {     
            $rows = db_query("DELETE FROM `presented` WHERE `approved` in ('N','A') AND `idpresent` =0$current_gift[idpresents] AND `user_presenter` =0$_SESSION[id]", true);
            if($rows == 1) die("OK");
        }
        die("NOT OK");
        break;
}


//TODO: протестить воркфлоу
//DONE: не отображаются врученные
//DONE: при переходе на конкретное желание корректно определять страницу
//TODO: добавить возможность ограничения доступа к желаниям
//TODO: добавить перевод желания в неактуальное состояние и обратно
//TODO: при загрузке изображений проверять реально ли файл является изображением (если закрыт достум, может скачаться HTML).
?>


